# kind: Template

Конфигурация предназначена для реализации «шаблона», по которому будет создаваться ресурс в результате креации.

Пример:

```yaml
kind: Template
apiVersion: kubelatte.io/v1alpha1
metadata:
  name: creation-template
spec:
  kind: Service
  apiVersion: v1
  data: |-
    kind: Service
    apiVersion: v1
    metadata:
      name: some-name
    spec:
      ports:
        - name: http-8080
          protocol: TCP
          port: 8080
          targetPort: 8080
      selector:
        some-selector/key: some-selector-value
      type: ClusterIP
      sessionAffinity: None
```

| Поле           | Назначение                                                |
|----------------|-----------------------------------------------------------|
| kind           | Вид мутируемого ресурса в рамках кластера                 |
| [data](#data)  | Описание полей ресурса для мутирования. Обязательное поле |



## data

Это поле позволяет описать секции ресурса, который создастся в результате креации.

Также есть возможность использовать параметризацию, то есть подстановку параметров из TriggerInstance секции spec.data. В таком случае в рамках шаблона  создания указывается ссылка на параметры с префиксом .Spec.DataObj:

Чтобы сервис был опубликован, необходимо реализовать конфигурации «kind: Trigger» для креации и «kind: TriggerInstance»

```yaml
kind: TriggerInstance
apiVersion: kubelatte.io/v1alpha1
metadata:
  name: my-triggerinstance
  namespace: some-namespace
  annotations:
    kblt/creation-kblt-svc: enabled
spec:
  data: |
    serviceName: my-servicename
    selector:
      key: istio
      value: myapp
```

Тогда при наличии конфигурации «kind: Trigger» по шаблону создастся ресурс, описанный в «data»

<table>
<tr>
<td> Шаблон «kind: Template», по которому создается ресурс </td> <td> В результате креации создастся ресурс </td>
</tr>
<tr>
<td> 

```yaml
kind: Template
apiVersion: kubelatte.io/v1alpha1
metadata:
  name: service-template
spec:
  kind: Service
  apiVersion: v1
  data: |-
    kind: Service
    apiVersion: v1
    metadata:
      name: {{% .Spec.DataObj.serviceName %}}
    spec:
      ports:
        - name: http-8080
          protocol: TCP
          port: 8080
          targetPort: 8080
      selector:
        {{% .Spec.DataObj.selector.key %}}: {{% .Spec.DataObj.selector.value %}}
      type: ClusterIP
      sessionAffinity: None
```

 </td>
<td>

```yaml
kind: Service
apiVersion: v1
metadata:
  namespace: demo-ns
  name: my-servicename
spec:
  ports:
    - name: http-8080
      protocol: TCP
      port: 8080
      targetPort: 8080
  selector:
    istio: myapp
  type: ClusterIP
  sessionAffinity: None
```

</td>
</tr>
</table>

В данном шаблоне возьмется значение имени сервиса и параметры селектора.





